In this article I intend to try to answer some common questions prospective game developers may have about getting started in the industry. Questions like: What skills are required, what kind of resources and software tools do you need? How much does it cost? Do you need a team?
The gaming industry is huge and includes a wide range of devices from consoles such as the Playstation, Xbox, and Wii, to PC's, browser based games, mobile games for Android and iPhone, and even handheld consoles such as the Playstation Vita. Languages such as Java, C++, JavaScript and ActionScript (flash) can be used. There are a multitude of books, websites, and forums available on each of these. Delving into this world can be a daunting prospect!
Everyone has their own goals and interests when starting out on any new venture, but there are some general tips and advice that I would give to budding game developers. The first thing that I feel is important is discuss is the subject of games engines. A game engine is essentially a software library that can be used to build a game. It has built in rendering, physics and network support. Many people create a game completely from scratch, writing the rendering engine, the physics engine, etc all themselves. This is an excellent way to learn about how a game engine is made, as well as learn about libraries like OpenGL and DirectX, but it is a long, difficult, and time consuming process.
Furthermore, writing your own engine will not necessarily teach you a lot about how to create a game, in the same way that building a car doesn't necessarily make you a good driver. Another approach is to use either a commercial or a free games engine to build your game. These engines can be difficult to learn, but they allow you to focus on building a game, instead of writing an engine. If your objective is to be a game developer, as opposed to a game engine programmer, I feel this is probably the best option.
Choosing an engine which provides access to the source code will also give you the ability to delve deep into the guts of the engine and modify or add features, as you grow more confident. To create a fully-fledged game by yourself, as a novice programmer, is a mammoth task that may leave many feeling frustrated. Even for a seasoned programmer, writing a games engine is a difficult undertaking.
Games engines range in price from completely free, to many thousands of Euros. For this discussion, I am limiting myself to discussing free or sub €100 engines. A point to note here, is that I am not considering an "engine" to be equivalent to one of the many "game maker" type programs out there. An engine is simply a library, in essence, containing a foundation upon which to build your own game. A gamemaker is basically a GUI that provides you with a series of customisation options which are interpreted by the program and used to produce a game. They are very simple to use, but do little to teach real game development skills.
But which is the best games engine? What is the best platform to get started on? PC? Mobile? Console? There are hundreds of engines and software libraries out there, which do you choose? Personal preference matters a lot here, but I will provide some recommendations and pricing information. Many engines are also cross-platform, allowing you to port a game to several devices or systems.
Console development is, for the most part, not an option for the novice developer, especially if you intend to sell your game. Console manufacturers have strict rules on who can develop on their consoles, and the dev kits (basically, a software package to allow a developer to write code for a console) cost into the tens of thousands of dollars. This leaves either mobile game development, or PC game development. Fortunately, both of these are quite accessible and quite lucrative for the amateur game developer.
For the PC, I have mentioned Torque 3D by GarageGames (www.garagegames.com) many times on my site. I first used the "Torque Game Engine" several years ago after picking up a book on game development ("3D Game Programming All in One" by Kenneth C. Finney) which included a version of the TGE with the book. I was immediately hooked, and, in fact, after getting halfway through the book, I was so excited to try out my own ideas that I still, to this day, haven't finished it!
Torque 3D has now gone open source under the MIT license, which makes it free for commercial and non-commercial use. Torque has quite a steep learning curve however, and is possibly not the best choice for someone wanting to get into games development quickly. You can bet on spending at least a few months just learning the ropes, if you are a complete novice. There is also a 2D engine available from GarageGames, Torque2D, which supports Windows, Mac OS X, and iOS mobile development (with Android support in the works).
Unity 3D by Unity Technologies (http://unity3d.com/) is another powerful engine aimed at the indie and hobbyist market. There is a free version available, with some restrictions, and the full version costs $1500. This is steep for someone just getting started, but the free version alone provides ample scope for learning the ropes. Unity 3D supports ioS, Android, Windows phone, and a host of other platforms.
Blitz 3D (http://www.blitzbasic.com) starts at $59 (€43). This is probably one of the simplest and easiest to learn engines out there, as well as being one of the least expensive. It does lack a lot of the power that some of the other engines have, and it mostly used for more casual games. It also only supports windows. However, as a tool to learn programming and game development, it is tough to beat. Blitz3D is built using basic, which is not a common language for game programming, and this may be considered a disadvantage. Blitz Research also offer other engines offering additional features, including support for Linux and Mac OS X, at slightly higher price point.
Mobile games are a massive new market, and their popularity continues to rise. Mobile games are almost always built with Java, and are often, but not necessarily, 2D. Mobile game development can be difficult, since dealing with the limitations of the hardware requires skill and good code optimisation. For Android development, the developer must support a wide range of devices with different screen sizes, processors, and capabilities, while maintaining the same play experience across all devices. This, again, is not always easy. Both Torque 2D and Unity can be used to develop mobile games.
An excellent resource for Java game programing is "Developing Games in Java" by David Brackeen. This is the textbook I used when I was studying game development in college, and it contains a lot of information and code samples to use to build simple games. Topics covered include 2D and 3D games, Artificial Intelligence, Sound and Multiplayer Gaming.
A powerful game engine, however, does not mean that a low-level knowledge of software development is not required. Game programming is a complex and diverse field, which combines software engineering, physics and mathematics in a way that few disciplines do. You can avoid a lot of the maths and physics if you like, but it will limit what kinds of games you can make. Unlike traditional software engineering, where reuse of code is common and encouraged, in game development, every game has to be unique and fresh. Copying code and features from an accounts package to a word processor application is not going to hurt your sales, but making a game that's a clone of something that already out there certainly will.
I would recommend Java as the best all-round language to learn programming. It is a nice language, quite easy to learn, very popular (and becoming more so) and Java programmers are in high demand in game development and software engineering. Java is used for websites, mobile games, apps, and can be used for desktop games as well. It's not as powerful as, say, C++, and not as easy to use as a scripting language like ActionScript, but it has an excellent mix of power and ease of use. For a developer hoping to go into mobile gaming or app development, Java knowledge is a must!
Whether you are working on 3D or 2D games, some graphic design skills will be necessary. There are free programs out there, such as the GIMP (www.gimp.org) and Inkscape (www.inkscape.org), it is not necessary to buy an expensive tool like Photoshop. GIMP (GNU image manipulation program) is primarily a bitmap graphics package with an excellent feature set. Inkscape is a vector graphics package, and is also impressive and completely free.
In order to create art for a 3D game, a modeling tool will be required. Again, you can pay thousands for a commercial tool such as 3DS Max or Maya, but there are also free alternative available, in the form of Blender (www.blender.org). This is an excellent, feature packed and completely free tool used by commercial and novice game developers and artists alike.
Creating textures for models or objects in the environment often requires the use of a texture library. In most cases it is not practical to create all source images yourself, and simply stealing them off of the internet is not an option! Luckily, for both 2D graphics and sound, there are several online royalty free texture and audio libraries available, both for free and commercial games. Imageafter (www.imageafter.com) is an excellent source for free textures, and Freesound (http://www.freesound.org/) offers many royalty free audio clips and sound effects. Free programs such as Audacity (http://audacity.sourceforge.net/) can be used to edit and process sound effects before using them. It is also possible to download or purchase 3D art assets from websites such as TurboSquid (www.turbosquid.com) which can reduce the art burden considerably. Some game engine manufactures also have a store where you may purchase art assets.
One final topic of discussion is on the subject of teams. The vast majority of games made are made by groups of people, often quite large groups, however care must be taken when joining or creating a team as a novice developer. I mentioned in a previous post (Here) that forming a team too early can lead to a lack of direction and the eventual failure of the project. This is true even for professionals, but for a novice attempting to create a game with other novices, this is particularly true. With teams of amateurs, it is very common to see people dropping out of the team, producing poor quality work, or no work at all, or creating an atmosphere of discord which can hurt productivity and doom a project.
I personally think, that at least in the beginning, a prospective developer should work alone, on small projects which should not take more than about six months to complete. Working with team members adds additional uncertainty and difficulty, and if a project goes on longer than six months or so it is possible that the developer will lose focus and the project will not be finished, the fate of many great, promising games. If a team is formed, it should be kept small, no more than 4 or 5 people, and they should ideally know each other, or live close to each other. It is common for developers to meet people on forums, and form a virtual team, and this can work well, but these circumstances clearly strain the team dynamic. I once knew someone recruited a team member to work on his project, and they agreed that part of the new recruits payment would be in the form of a licence to the games engine that the developer was using, which the new member would then be free to use for his own projects afterwards. The developer paid for the licence, and then never heard from the other team member again, that was an expensive lesson!
In summary, a prospective game developer must harness a variety of skills, even if they eventually intend to specialise in one area. Luckily, the software tools and resources necessary to develop and hone these skills are either freely available or inexpensive. An excellent general resource for all things game-related in Ireland is GameDevelopers.ie (www.gamedevelopers.ie). This is a popular site packed with information, links, and forums for both novices and professionals alike. For programming support, I recommend StackOverflow (http://stackoverflow.com/). This site has sub forums for many different languages, and has a high response rate. In addition to this, all of the games engines I have mentioned have their own support forums, specific to their engines.
Game Development is a fascinating, rewarding, and diverse field, but it does take time and effort to build up any degree of skill or ability. A games engine, compiler, editor, or modeling package is just a software tool, ultimately the only thing that can make a great game is you!